#include <iostream>
#include <future>
#include <thread>
#include <memory>

int ADD(int num1, int num2)
{
    std::cout << "running the ADD func" << std::endl;
    return num1 + num2;
}
// package的功能就是将这个函数转化为一个可调用对象
// 与promise不同，promise需要在函数体内部进行set_value
int main()
{
    auto ptr = std::make_shared<std::packaged_task<int(int, int)>>(ADD);
    std::future<int> fu = ptr->get_future();

    std::thread thr([ptr]()
                    { (*ptr)(10, 20); });
    std::cout << fu.get() << std::endl;
    thr.join();
}